/*
 * timer.h
 *
 *  Created on: 2016年9月3日
 *      Author: pengzhikang
 */

#ifndef _TIMER_H
#define _TIMER_H 1

#include "naskfunc.h"
#include "fifo.h"

#define MAX_TIMER 500

/**
 * timerout 超时时间
 * flags 定时器状态,0表示未使用
 * flags2 是否需要在应用程序结束时自动取消
 * fifo 堆栈
 * data 超时标志
 */
struct TIMER {
	struct TIMER *next;
	unsigned int timeout;
	char flags, flags2;
	struct FIFO32 *fifo;
	int data;
};

/**
 * count 当前时刻
 * next 下一个要超时的定时器
 * using 处于活动状态的定时器个数
 * timer 所有的定时器数组
 */
struct TIMERCTL {
	unsigned int count, next;
	struct TIMER *start;
	struct TIMER timers0[MAX_TIMER];
};

void init_pit(void);
void inthandler20(int *esp);
struct TIMER *timer_alloc(void);
void timer_free(struct TIMER *timer);
void timer_init(struct TIMER *timer, struct FIFO32 *fifo, int data);
void timer_settime(struct TIMER *timer, unsigned int timeout);
int timer_cancel(struct TIMER *timer);
void timer_cancelall(struct FIFO32 *fifo);

#endif /* _TIMER_H */
